#!/bin/bash

# Flask应用停止脚本

echo "正在停止Flask应用..."

# 检查PID文件是否存在
if [ ! -f "app.pid" ]; then
    echo "未找到PID文件，应用可能未运行"
    
    # 尝试通过端口查找进程
    echo "尝试通过端口8080查找进程..."
    PIDS=$(lsof -ti:8080 2>/dev/null)
    
    if [ -z "$PIDS" ]; then
        echo "未找到运行在端口8080的进程"
        exit 1
    else
        echo "找到运行在端口8080的进程: $PIDS"
        for PID in $PIDS; do
            echo "正在终止进程 $PID..."
            kill $PID
            sleep 2
            if ps -p $PID > /dev/null 2>&1; then
                echo "强制终止进程 $PID"
                kill -9 $PID
            fi
        done
        echo "✅ 所有相关进程已终止"
        exit 0
    fi
fi

# 读取PID
PID=$(cat app.pid)

# 检查进程是否存在
if ! ps -p $PID > /dev/null 2>&1; then
    echo "进程 $PID 不存在，清理PID文件"
    rm -f app.pid
    exit 0
fi

# 优雅终止进程
echo "正在终止进程 $PID..."
kill $PID

# 等待进程终止
for i in {1..10}; do
    if ! ps -p $PID > /dev/null 2>&1; then
        echo "✅ 进程已成功终止"
        rm -f app.pid
        exit 0
    fi
    echo "等待进程终止... ($i/10)"
    sleep 1
done

# 如果进程仍然存在，强制终止
echo "进程未响应，强制终止..."
kill -9 $PID

# 再次检查
if ps -p $PID > /dev/null 2>&1; then
    echo "❌ 无法终止进程 $PID"
    exit 1
else
    echo "✅ 进程已强制终止"
    rm -f app.pid
fi